#include "../inc/main.h"
#include "../inc/queue.h"

// 初始化队列
void initQueue(PatientQueue *queue)
{
    queue->front = NULL;
    queue->rear = NULL;
    queue->count = 0;
}

// 判断队列是否空
int isEmpty(PatientQueue *queue)
{
    return queue->count == 0;
}

// 入队
void enqueue(PatientQueue *queue, Patient *patient)
{
    patient->next = NULL;
    patient->prev = queue->rear; // 设置新节点的prev为当前的rear
    if (isEmpty(queue))
    {
        queue->front = patient;
        queue->rear = patient;
    }
    else
    {
        queue->rear->next = patient; // 将新节点链接到队列的末尾
        queue->rear = patient;       // 更新rear为新节点
    }
    queue->count++;
}

// 出队
Patient *dequeue(PatientQueue *queue)
{
    if (isEmpty(queue))
    {
        return NULL;
    }
    Patient *patient = queue->front;
    if (queue->front == queue->rear)
    { 
        // 如果只有一个元素，即队列为空
        queue->front = NULL;
        queue->rear = NULL;
    }
    else
    {
        queue->front = queue->front->next; // 否则，将front移动到下一个节点
        queue->front->prev = NULL;         // 新front的prev应该为NULL
    }
    queue->count--;
    return patient;
}

// 释放队列内存
void freeQueue(PatientQueue *queue)
{
    while (!isEmpty(queue))
    {
        Patient *patient = dequeue(queue);
        free(patient); // 释放患者节点内存
    }
}

// 从文件加载患者信息
// void loadPatientsFromFile(PatientQueue *queue, const char *filename)
// {
//     FILE *file = fopen(filename, "r");
//     if (!file)
//     {
//         perror("无法打开文件");
//         return;
//     }

//     char line[NAME_LENGTH];
//     while (fgets(line, sizeof(line), file))
//     {
//         // 创建新的患者节点
//         Patient *patient = (Patient *)malloc(sizeof(Patient));
//         if (patient == NULL)
//         {
//             perror("内存分配失败");
//             fclose(file);
//             return;
//         }
//         // 去掉换行符
//         line[strcspn(line, "\n")] = 0;
//         strcpy(patient->name, line);
//         enqueue(queue, patient);
//     }

//     // while (fscanf(file, "%s", line) == 1)
//     // {
//     //     printf("读取患者姓名: %s\n", line);
//     //     // 创建新的患者节点
//     //     Patient *patient = (Patient *)malloc(sizeof(Patient));
//     //     if (patient == NULL)
//     //     {
//     //         perror("内存分配失败");
//     //         fclose(file);
//     //         return;
//     //     }
//     //     // 去掉换行符
//     //     line[strcspn(line, "\n")] = 0;
//     //     strcpy(patient->name, line);
//     //     enqueue(queue, patient);
//     // }

//     fclose(file);
// }